3.1 机器学习基础

🎯 学习目标

通过鸢尾花分类器项目,掌握机器学习的基本概念和流程,包括:

  • 理解机器学习的基本概念和分类
  • 学会加载和探索数据集
  • 掌握数据划分的方法
  • 学会训练和评估分类模型
  • 理解决策树算法的原理

📋 项目预览

我们将创建一个鸢尾花分类器,能够根据花的特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)自动识别花的种类(山鸢尾、变色鸢尾、维吉尼亚鸢尾)。

🧠 核心概念详解

1. 什么是机器学习?

机器学习就像教电脑学习识别模式,而不是直接告诉它答案。

生活化比喻

  • 传统编程:你告诉电脑"如果花萼长度>5cm且花瓣长度>3cm,就是山鸢尾"
  • 机器学习:你给电脑看很多花的照片和标签,让它自己总结规律

机器学习三要素

  1. 数据 - 学习的材料
  2. 模型 - 学习的方法
  3. 评估 - 检验学习效果

2. 机器学习的分类

类型 特点 例子
监督学习 有标签数据 分类、回归
无监督学习 无标签数据 聚类、降维
强化学习 通过奖励学习 游戏AI、机器人

我们的鸢尾花分类属于监督学习中的分类问题

3. 数据集的结构

# 特征(Features) - 输入数据
特征 = [花萼长度, 花萼宽度, 花瓣长度, 花瓣宽度]

# 标签(Labels) - 正确答案
标签 = [山鸢尾, 变色鸢尾, 维吉尼亚鸢尾]

关键概念

  • 特征:描述事物的属性(如花的尺寸)
  • 标签:我们要预测的目标(如花的种类)
  • 样本:一个完整的数据点(如一朵花的所有信息)

4. 训练集和测试集

为什么要划分数据?

  • 训练集:用来教模型(就像学生的练习题)
  • 测试集:用来考模型(就像期末考试)

生活化比喻

  • 如果只用练习题考试,学生可能只是背答案
  • 用新题目考试,才能看出真正学会了多少
# 数据划分示例
训练集:120朵花(80%)
测试集:30朵花(20%)

5. 决策树算法

决策树就像做选择题的流程图:

花萼长度 > 5.5cm?
    ├── 是 → 花瓣宽度 > 1.8cm?
    │       ├── 是 → 维吉尼亚鸢尾
    │       └── 否 → 变色鸢尾
    └── 否 → 山鸢尾

决策树的特点

  • 容易理解:规则清晰可见
  • 无需数据预处理:对数据要求低
  • 容易过拟合:可能记住太多细节

6. 模型评估指标

准确率(Accuracy)

准确率 = 正确预测的数量 / 总预测数量

分类报告(Classification Report)

  • 精确率:预测为正的样本中真正为正的比例
  • 召回率:实际为正的样本中被正确预测的比例
  • F1分数:精确率和召回率的调和平均

🔧 代码实现详解

1. 数据加载和探索

from sklearn.datasets import load_iris

# 加载数据集
iris = load_iris()

# 查看数据集信息
print("特征名称:", iris.feature_names)
print("类别名称:", iris.target_names)
print("数据形状:", iris.data.shape)

代码说明

  • load_iris():加载经典的鸢尾花数据集
  • feature_names:特征名称列表
  • target_names:类别名称列表
  • data.shape:数据的维度(样本数×特征数)

2. 数据划分

from sklearn.model_selection import train_test_split

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
    iris.data, iris.target, test_size=0.3, random_state=42
)

参数说明

  • test_size=0.3:测试集占30%
  • random_state=42:随机种子,确保每次划分结果相同
  • X_train, y_train:训练特征和标签
  • X_test, y_test:测试特征和标签

3. 模型训练

from sklearn.tree import DecisionTreeClassifier

# 创建决策树模型
clf = DecisionTreeClassifier(max_depth=3, random_state=42)

# 训练模型
clf.fit(X_train, y_train)

参数说明

  • max_depth=3:限制树的最大深度,防止过拟合
  • random_state=42:确保结果可重现
  • fit():用训练数据训练模型

4. 模型预测和评估

from sklearn.metrics import accuracy_score, classification_report

# 预测测试集
y_pred = clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)

# 详细分类报告
print(classification_report(y_test, y_pred, target_names=iris.target_names))

5. 模型应用

# 预测新样本
new_flower = [[5.1, 3.5, 1.4, 0.2]]  # 花萼长5.1, 宽3.5, 花瓣长1.4, 宽0.2
prediction = clf.predict(new_flower)
probability = clf.predict_proba(new_flower)

print("预测类别:", iris.target_names[prediction[0]])
print("各类别概率:", probability)

📊 完整代码解析

让我们逐行分析 3.1_鸢尾花分类器.py 的关键代码:

数据加载部分

iris = load_iris()
print(f"特征数量: {len(iris.feature_names)}")
  • 加载数据集并显示基本信息
  • 帮助理解数据的结构和规模

数据划分部分

X_train, X_test, y_train, y_test = train_test_split(
    iris.data, iris.target, test_size=0.3, random_state=42
)
  • 将数据分为训练集和测试集
  • 确保每次运行结果一致

模型训练部分

clf = DecisionTreeClassifier(max_depth=3, random_state=42)
clf.fit(X_train, y_train)
  • 创建决策树模型
  • 用训练数据训练模型

预测评估部分

y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
  • 用测试集进行预测
  • 计算预测准确率

可视化部分

plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names)
  • 生成决策树的可视化图形
  • 直观展示分类规则

🎯 学习要点总结

  1. 机器学习概念:理解监督学习、无监督学习、强化学习的区别
  2. 数据集结构:掌握特征、标签、样本的概念
  3. 数据划分:理解训练集和测试集的作用
  4. 决策树算法:了解决策树的工作原理和优缺点
  5. 模型评估:掌握准确率、精确率、召回率等指标
  6. 模型应用:学会用训练好的模型进行预测
  7. 可视化:学会生成和理解模型的可视化结果
  8. 参数调优:了解模型参数对性能的影响

💡 练习建议

基础练习

  1. 修改max_depth参数:尝试不同的树深度,观察对准确率的影响
  2. 调整测试集比例:改变test_size参数,观察划分比例的影响
  3. 添加更多评估指标:计算混淆矩阵和F1分数

进阶练习

  1. 尝试其他算法:用KNN或逻辑回归实现相同的分类任务
  2. 特征重要性分析:分析哪些特征对分类最重要
  3. 交叉验证:使用交叉验证获得更稳定的评估结果

扩展练习

  1. 在其他数据集上应用:尝试在乳腺癌数据集或葡萄酒数据集上应用
  2. 模型部署:创建一个简单的Web界面进行在线预测
  3. 性能优化:尝试优化模型参数以获得更好的性能

🚀 下一步学习

完成本项目后,你已经掌握了机器学习的基本流程。接下来可以:

  • 学习线性回归解决预测问题(3.2房价预测器)
  • 学习KNN算法解决图像分类问题(3.3手写数字识别器)
  • 深入了解决策树的变种,如随机森林和梯度提升树

记住:机器学习最重要的是理解数据、选择合适的算法、正确评估模型效果!

« 上一篇 2.3 数据可视化 下一篇 » 3.2 线性回归与预测